﻿Shader "Zoxel/Icon"
{
		Properties
		{
						_Backdrop("Backdrop", 2D) = "white" {}
						_BaseMap("BaseMap", 2D) = "white" {}
						_BaseColor("Color", Color) = (1, 1, 1, 1)
						_Cutoff("AlphaCutout", Range(0.0, 1.0)) = 0.5

								// BlendMode
								[HideInInspector] _Surface("__surface", Float) = 0.0
								[HideInInspector] _Blend("__blend", Float) = 0.0
								[HideInInspector] _AlphaClip("__clip", Float) = 0.0
								[HideInInspector] _SrcBlend("Src", Float) = 1.0
								[HideInInspector] _DstBlend("Dst", Float) = 0.0
								[HideInInspector] _ZWrite("ZWrite", Float) = 1.0
								[HideInInspector] _Cull("__cull", Float) = 2.0

								// Editmode props
								[HideInInspector] _QueueOffset("Queue offset", Float) = 0.0

								// ObsoleteProperties
								//[HideInInspector] _MainTex("BaseMap", 2D) = "white" {}
								//[HideInInspector] _Color("Base Color", Color) = (0.5, 0.5, 0.5, 1)
								//[HideInInspector] _SampleGI("SampleGI", float) = 0.0 // needed from bakedlit
		}

						SubShader
						{
										Tags { "RenderType" = "Opaque" "IgnoreProjector" = "True" "RenderPipeline" = "UniversalPipeline" }
										LOD 100

										Blend[_SrcBlend][_DstBlend]
										ZWrite[_ZWrite]
										Cull[_Cull]

										Pass
										{
														Name "Unlit"
														HLSLPROGRAM
														// Required to compile gles 2.0 with standard srp library
														#pragma prefer_hlslcc gles
														#pragma exclude_renderers d3d11_9x

														#pragma vertex vert
														#pragma fragment frag
														#pragma shader_feature _ALPHATEST_ON
														#pragma shader_feature _ALPHAPREMULTIPLY_ON

														// -------------------------------------
														// Unity defined keywords
														#pragma multi_compile_fog
														#pragma multi_compile_instancing

														#include "Assets/Shaders/UnlitInput.hlsl"

														struct Attributes
														{
																		float4 positionOS       : POSITION;
																		float2 uv               : TEXCOORD0;
																		UNITY_VERTEX_INPUT_INSTANCE_ID
														};

														struct Varyings
														{
																		float2 uv        : TEXCOORD0;
																		float fogCoord : TEXCOORD1;
																		float4 vertex : SV_POSITION;

																		UNITY_VERTEX_INPUT_INSTANCE_ID
																		UNITY_VERTEX_OUTPUT_STEREO
														};

														sampler2D _Backdrop;
														sampler2D _BaseMap;

														Varyings vert(Attributes input)
														{
																		Varyings output = (Varyings)0;

																		UNITY_SETUP_INSTANCE_ID(input);
																		UNITY_TRANSFER_INSTANCE_ID(input, output);
																		UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);

																		VertexPositionInputs vertexInput = GetVertexPositionInputs(input.positionOS.xyz);
																		output.vertex = vertexInput.positionCS;
																		output.uv = TRANSFORM_TEX(input.uv, Backdrop);
																		output.fogCoord = ComputeFogFactor(vertexInput.positionCS.z);

																		return output;
														}
														//int _IsBaseMapAddition;

														half4 frag(Varyings input) : SV_Target
														{
																		UNITY_SETUP_INSTANCE_ID(input);

																		half2 uv = input.uv;
																		half4 texColor = SAMPLE_TEXTURE2D(_Backdrop, sampler_BaseMap, uv);
																		half3 color = texColor.rgb * _BaseColor.rgb;
																		half alpha = texColor.a * _BaseColor.a;
																		half4 texColorAddition = tex2D(_BaseMap, uv);
																		if (texColorAddition.w != 0)
																		{
																				color = texColorAddition;
																				alpha = 1;
																		}
																AlphaDiscard(alpha, _Cutoff);
																#ifdef _ALPHAPREMULTIPLY_ON
																color *= alpha;
																#endif
																color = MixFog(color, input.fogCoord);
																return half4(color, alpha);
														}
														ENDHLSL
										}

										Pass
										{
														Tags{"LightMode" = "DepthOnly"}

														ZWrite On
														ColorMask 0

														HLSLPROGRAM
														// Required to compile gles 2.0 with standard srp library
														#pragma prefer_hlslcc gles
														#pragma exclude_renderers d3d11_9x
														#pragma target 2.0

														#pragma vertex DepthOnlyVertex
														#pragma fragment DepthOnlyFragment

														// -------------------------------------
														// Material Keywords
														#pragma shader_feature _ALPHATEST_ON

														//--------------------------------------
														// GPU Instancing
														#pragma multi_compile_instancing

														#include "Assets/Shaders/UnlitInput.hlsl"
														#include "Assets/Shaders/DepthOnlyPass.hlsl"
														ENDHLSL
										}

										// This pass it not used during regular rendering, only for lightmap baking.
										Pass
										{
														Name "Meta"
														Tags{"LightMode" = "Meta"}
														Cull Off
														HLSLPROGRAM
												// Required to compile gles 2.0 with standard srp library
												#pragma prefer_hlslcc gles
												#pragma exclude_renderers d3d11_9x
												#pragma vertex LightweightVertexMeta
												#pragma fragment LightweightFragmentMetaUnlit

												#include "Assets/Shaders/UnlitInput.hlsl"
												#include "Assets/Shaders/UnlitMetaPass.hlsl"

												ENDHLSL
										}
						}
						FallBack "Hidden/InternalErrorShader"
}
